package notify.xgx.com.notifydemo;

import android.os.Handler;
import android.os.Message;

import java.util.ArrayList;

/**
 *
 * Created by mik_eddy on 14/12/13.
 */
public class NotifyInfo {

    enum NOTIFYCODE{
        FINISH
    }

    //回调的callback
    INotifycallBack mCallBack;
    //所有的回调码,当某处调用notifyCallBack的时候会根据notifycode来找到对应的回调并进行调用
    ArrayList<NOTIFYCODE> mNotifyCodes;

    /**
     * 立即通知一个回调
     * @param notifycode 通知code枚举
     * @param objs   通知需要传递的内容
     * @return  返回一个通知的处理结果(如果只是单纯的通知没有返回结果则返回null)
     */
    public Object notifyCallBack(NOTIFYCODE notifycode,Object...objs){
        if(mCallBack!=null&&getNotifyCodes().size()>0){
            if(getNotifyCodes().contains(notifycode)){
                return mCallBack.onNotify(notifycode,objs);
            }
        }
        PalLog.printE("aaa", "notifycode::" + notifycode + ":: not exists or callback is null!!!");
        return null;
    }

    /**
     * 一个带延时的通知回调
     * @param notifycode 通知code码枚举
     * @param objs   通知需要传递的内容
     * @param delay  延时多少毫秒通知
     * @param callback 通知调用后的回调
     */
    public void notifyCallBackDelay(final NOTIFYCODE notifycode,int delay, final INotifycallBackResp callback,final Object...objs){
        new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if(mCallBack!=null&&getNotifyCodes().size()>0){
                    //延时到期后立即notify,然后把得到的object返回到callback接口
                    Object obj=notifyCallBack(notifycode, objs);
                    callback.onResp(notifycode, obj);
                    return;
                }
                PalLog.printE("aaa","notifycode ::"+notifycode+":: not exists or callback is null!!!");
            }
        }.sendEmptyMessageDelayed(0,delay);
    }


    /**
     * 添加一个notifycode
     * @param notifycode 需要添加的notifycode
     */
    public void addNotifyCode(NOTIFYCODE notifycode){
        if(!getNotifyCodes().contains(notifycode))getNotifyCodes().add(notifycode);
    }

    public  void setNotifyCallBackListener(INotifycallBack callback){
        mCallBack=callback;
    }

    /**
     * 获取所有的notifycodes
     * @return 返回当前所有的notifycodes
     */
    public ArrayList<NOTIFYCODE> getNotifyCodes(){
        if(mNotifyCodes==null)mNotifyCodes=new ArrayList<NOTIFYCODE>();
        return mNotifyCodes;
    }


    /**
     * 清空当前回调的notifycodes
     */
    public void clear(){
        if(mNotifyCodes!=null)mNotifyCodes.clear();
        mNotifyCodes=null;
        mCallBack=null;
    }
}
